//将一个date变量转成yyyy-MM-dd HH:mm:ss格式（java中）
const formatDate = (date) => {
  const pad = n => n.toString().padStart(2, '0')
  const d = new Date(date)
  return `${d.getFullYear()}-${pad(d.getMonth() + 1)}-${pad(d.getDate())} ${pad(d.getHours())}:${pad(d.getMinutes())}:${pad(d.getSeconds())}`
}

// 用户只能选择一个日期，但是数据后需要存datetime，这里根据date获取datetime传给后端，规则入下：如果是当天，则去new Date中的时间，其他日期，则取23:59:59
function formatCreatedDate(dateStr) {
  if (!dateStr) return null;

  // 解析用户选择的日期（格式：YYYY-MM-DD）
  const selected = new Date(dateStr);
  // 确保是有效日期
  if (isNaN(selected.getTime())) return null;

  // 获取今天的日期（忽略时分秒）
  const today = new Date();
  const todayStart = new Date(today.getFullYear(), today.getMonth(), today.getDate());

  // 比较是否是同一天
  const isSelectedToday =
    selected.getFullYear() === todayStart.getFullYear() &&
    selected.getMonth() === todayStart.getMonth() &&
    selected.getDate() === todayStart.getDate();

  let resultDate;
  if (isSelectedToday) {
    // 是今天 → 使用当前精确时间
    resultDate = new Date(); // 当前时间（含时分秒）
  } else {
    // 不是今天 → 设置为当天 23:59:59
    resultDate = new Date(selected.getFullYear(), selected.getMonth(), selected.getDate(), 23, 59, 59);
  }

  // 格式化为 "YYYY-MM-DD HH:mm:ss"
  const pad = (num) => String(num).padStart(2, '0');
  const year = resultDate.getFullYear();
  const month = pad(resultDate.getMonth() + 1); // getMonth() 是 0-11
  const day = pad(resultDate.getDate());
  const hours = pad(resultDate.getHours());
  const minutes = pad(resultDate.getMinutes());
  const seconds = pad(resultDate.getSeconds());

  return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`;
}

// 判断传入的变量是否是一个 >= 0 的数字（包括整数和浮点数）
function isNonNegativeNumber(value) {
  return typeof value === 'number' && !isNaN(value) && isFinite(value) && value >= 0;
}

//  判断传入的变量是否是一个数字，并在指定范围内（包含边界）
function isNumberInRange(value, min, max) {
  if (typeof value !== 'number' || isNaN(value) || !isFinite(value)) {
    return false;
  }
  return value >= min && value <= max;
}


export {formatDate, formatCreatedDate,  isNonNegativeNumber, isNumberInRange};